# GENERATOR ATP OTOMATIS v3
### Berbasis Capaian Pembelajaran Resmi Kemendikdasmen

**Sumber rujukan:** Keputusan Kepala BSKAP Kemendikdasmen
**Nomor 046/H/KR/2025** (1.691 halaman).

---

## 1. FORM MASUKAN

```
[1] Mata Pelajaran        : ______________________
[2] Fase / Kelas          : ( ) E/X   ( ) F/XI   ( ) F/XII
[3] JP per minggu         : [    ]
[4] JP dalam 1x pertemuan : [    ]
[5] Jumlah Minggu Efektif
      - Semester Ganjil   : [    ]   (kelaziman 17-22 minggu)
      - Semester Genap    : [    ]   (kelaziman 13-16 minggu)
[6] Satuan Pendidikan     : ______________________
[7] Tahun Pelajaran       : ______________________
```

Jalankan: **klik dua kali `JALANKAN.bat`** (Windows) atau

```
python3 atpgen/atp.py --form
```

---

## 2. MINGGU EFEKTIF vs PERTEMUAN vs JP

Tiga satuan ini **berbeda** dan tidak boleh dicampur:

| Satuan | Arti |
|---|---|
| **Minggu efektif** | Jumlah minggu pembelajaran nyata dalam 1 semester (kalender pendidikan). 1 bulan biasanya 4-5 minggu. |
| **JP per minggu** | Jatah jam pelajaran mapel tsb per minggu menurut struktur kurikulum. |
| **JP per pertemuan** | Berapa JP yang diajarkan dalam 1x tatap muka. |
| **Pertemuan** | Hasil hitungan: `JP per minggu / JP per pertemuan`. |

### Contoh

Mapel dengan **4 JP per minggu**, dipecah **2 hari** dalam seminggu:

```
JP per minggu       = 4
JP per pertemuan    = 2
-> Pertemuan/minggu = 4 / 2 = 2 kali (misal Selasa & Kamis)
-> Durasi 1 kali TM = 2 x 45 = 90 menit

Semester Ganjil, 22 minggu efektif:
   JP        = 22 x 4  = 88 JP
   Pertemuan = 22 x 2  = 44 kali
   Menit     = 88 x 45 = 3.960 menit
```

Bila mapel hanya **2 JP per minggu dan sekali tatap muka**, isi
`JP per pertemuan = 2`, sehingga 1 pertemuan per minggu.

### Rumus

```
pertemuan_per_minggu = JP_per_minggu / JP_per_pertemuan
JP_semester          = minggu_efektif x JP_per_minggu
pertemuan_semester   = minggu_efektif x pertemuan_per_minggu
menit_semester       = JP_semester x 45
```

`JP per minggu` **harus habis dibagi** `JP per pertemuan`. Bila tidak,
program menolak dan menampilkan pilihan angka yang sah.

| JP/minggu | Pilihan JP per pertemuan yang sah |
|---|---|
| 2 | 1, 2 |
| 3 | 1, 3 |
| 4 | 1, 2, 4 |
| 5 | 1, 5 |
| 6 | 1, 2, 3, 6 |
| 8 | 1, 2, 4, 8 |
| 11 | 1, 11 |
| 12 | 1, 2, 3, 4, 6, 12 |

---

## 3. LOKASI PENYIMPANAN HASIL

Berkas `.docx` tersimpan di **folder induk dari `atpgen`**, yaitu folder tempat
`JALANKAN.bat` berada:

```
D:\Project\generator-atp\ATP BAHASA INDONESIA - KELAS X FASE E.docx
```

Jalur lengkapnya selalu dicetak di layar setelah proses selesai:

```
📁 TERSIMPAN DI:
D:\Project\generator-atp\ATP BAHASA INDONESIA - KELAS X FASE E.docx
```

Untuk menentukan sendiri lokasi/nama berkas, gunakan `--out`.

---

## 4. STRUKTUR SEMESTER (OTOMATIS)

| Fase | Kelas | Semester yang dihasilkan |
|---|---|---|
| **E** | **X** | Semester 1 (Ganjil) + Semester 2 (Genap) |
| **F** | **XI** | Semester 3 (Ganjil) + Semester 4 (Genap) |
| **F** | **XII** | ~~Semester 5 (Ganjil) = PKL~~ + Semester 6 (Genap) |

Semester 5 tidak digenerate karena murid sedang Praktik Kerja Lapangan.
Barisnya tetap tampil sebagai keterangan berarsir abu-abu.

---

## 5. LOGIKA PEMBAGIAN ELEMEN

### 5.1 Fase E (Kelas X) - 2 semester aktif

Dibagi rata; bila ganjil, **kelebihan ke semester Ganjil**.

| Elemen | Ganjil | Genap |
|---|---|---|
| 4 | 2 | 2 |
| 5 | **3** | 2 |
| 7 | **4** | 3 |
| 10 | 5 | 5 |
| 11 | **6** | 5 |

### 5.2 Fase F (Kelas XI-XII) - 3 semester aktif

```
Porsi Kelas XI  = ceil( N x 2/3 )   -> Sem 3 + Sem 4
Porsi Kelas XII = sisanya            -> Sem 6
```

| Elemen | Sem 3 (XI) | Sem 4 (XI) | Sem 6 (XII) |
|---|---|---|---|
| 4 | 2 | 1 | 1 |
| 6 | 2 | 2 | 2 |
| 7 | **3** | 2 | 2 |
| 10 | **4** | 3 | 3 |

Dapat ditimpa dengan `--elemen-kelas11 N`.

---

## 6. PERINTAH

```
python3 atpgen/atp.py --list "otomotif"

python3 atpgen/atp.py --mapel "Bahasa Indonesia" --kelas X  --jp 4 --jpp 2 --mg 22 --mn 15

python3 atpgen/atp.py --mapel "Seni Tari"        --kelas X  --jp 2 --jpp 2 --mg 22 --mn 15

python3 atpgen/atp.py --mapel "Teknik Sepeda Motor" --kelas XI  --jp 8 --jpp 4 --mg 20 --mn 14

python3 atpgen/atp.py --mapel "Teknik Sepeda Motor" --kelas XII --jp 8 --jpp 4 --mn 14
```

Di Windows ganti `python3` menjadi `py`.

---

## 7. DAFTAR PARAMETER

| Parameter | Wajib | Default | Keterangan |
|---|---|---|---|
| `--mapel` | Ya | - | Nama mata pelajaran (pencarian fleksibel) |
| `--jp` | Ya | - | JP per minggu |
| `--jpp` | Tidak | = `--jp` | **JP dalam 1x pertemuan** |
| `--kelas` | Disarankan | X | X / XI / XII |
| `--fase` | Tidak | ikut kelas | A-F |
| `--mg` | Tidak | 22 | Minggu efektif semester ganjil |
| `--mn` | Tidak | 15 | Minggu efektif semester genap |
| `--menit` | Tidak | 45 | Durasi 1 JP |
| `--elemen-kelas11` | Tidak | ceil(N x 2/3) | Porsi elemen Fase F untuk Kelas XI |
| `--sekolah` | Tidak | SMKS PGRI 2 Jambi | Satuan pendidikan |
| `--tahun` | Tidak | 2026/2027 | Tahun pelajaran |
| `--out` | Tidak | folder induk | Nama/lokasi berkas keluaran |
| `--form` | - | - | Mode form interaktif |
| `--list` | - | - | Mode pencarian mata pelajaran |

---

## 8. VALIDASI OTOMATIS

| Pemeriksaan | Perilaku |
|---|---|
| Kombinasi Fase/Kelas tidak sah (mis. E/XI) | Ditolak |
| `--jp` tidak habis dibagi `--jpp` | Ditolak + daftar angka yang sah |
| Minggu ganjil di luar 17-22 | Peringatan (tetap diproses) |
| Minggu genap di luar 13-16 | Peringatan (tetap diproses) |
| Jumlah elemen > minggu efektif | Ditolak |
| Mapel tidak punya fase yang diminta | Ditolak + saran mapel mirip |
| Total minggu per semester | Dijamin tepat |

---

## 9. KOLOM KELUARAN

| # | Kolom | Sumber |
|---|---|---|
| 1 | Elemen | Disalin persis dari dokumen resmi |
| 2 | Capaian Pembelajaran | Disalin persis dari dokumen resmi |
| 3 | Alur Tujuan Pembelajaran | Diturunkan dari klausa CP |
| 4 | Tujuan Pembelajaran | Dirumuskan "Murid mampu ..." |
| 5 | 8 Dimensi Profil Lulusan | Hanya 3-4 dimensi yang relevan |
| 6 | Materi Pokok | Dari tabel Karakteristik (bagian C) |
| 7 | Media Pembelajaran | Pustaka 13 rumpun keahlian |
| 8 | Alokasi Waktu | JP + minggu + **pertemuan** + menit |

Contoh isi kolom Alokasi Waktu:

```
40 JP
10 minggu x 4 JP
20 pertemuan x 2 JP
= 1800 menit
```

---

## 10. CAKUPAN BASIS DATA

| Kelompok | Jumlah |
|---|---|
| Lampiran II (Mapel Umum) | 40 |
| Lampiran III (SMK/MAK) | 178 |
| **Total** | **218** |
| Memiliki Fase E | 71 |
| Memiliki Fase F | 164 |
| Tabel Karakteristik terbaca | 213 (97,7%) |

---

## 11. CATATAN

- Kolom **Elemen** dan **Capaian Pembelajaran** bersifat legal, disalin apa
  adanya, tidak diparafrase.
- Kolom **ATP, TP, Materi Pokok, Media** bersifat operasional dan dapat
  disunting guru.
- Seluruh rumusan menggunakan istilah **"Murid"** sesuai dokumen resmi.
- Program berjalan **sepenuhnya offline**, tanpa API key dan tanpa internet.
